/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sokoban.controller;

import java.awt.Component;
import javax.swing.JLabel;
import java.awt.Color;
import sokoban.model.Element;
import javax.swing.ImageIcon;

import java.util.*;
import javax.swing.JPanel;

import sokoban.model.Doos;
import sokoban.model.Speler;
import sokoban.model.Muur;
import sokoban.model.Doel;
/**
 *
 * @author Otto
 */
public class Speelveld {
    private Besturing besturingController;

    private HashMap elementen;
    private HashMap doelElementen;
    private Integer aantalDoelen = 0;
    private Integer aantalStappen = 0;
    private Boolean kindModus;
    private Integer spelerX = 0;
    private Integer spelerY = 0;

    private Integer homeSpelerX = 0;
    private Integer homeSpelerY = 0;
 
    /**
    * De constructor voor de Speelveld klasse.
    * @param besturing De Besturing klasse die zichzelf meegeeft zodat teruggecommuniceerd kan worden.
    * @param level Het level dat door de gebruiker gekozen is om te spelen
    * @param kindModus Een boolean dat aangeeft of de gebruiker de kindmodus heeft geselecteerd of niet
    **/
    public Speelveld(Besturing besturing, Integer level, boolean kindModus){
        // De besturing controller geeft zichzelf mee zodat het speelveld terug kan communiceren
        this.besturingController = besturing;
        this.kindModus = kindModus;

        elementen = new HashMap<String, Element>();
        doelElementen = new HashMap<String, Doel>();
        
        laadSpeelveld();

        homeSpelerX = spelerX;
        homeSpelerY = spelerY;
    }

    /**
    * Brengt de speler in een level terug naar zijn begin positie
    */
    public boolean brengSpelerThuis(){
        boolean spelerVerplaatst = false;

        // Controleer of er geen doos op de plaats van de oude coordinaten staat
        Element homeElement = (Element)elementen.get(homeSpelerY + "-" + homeSpelerX);
        if (homeElement == null || homeElement.getType() != Element.types.DOOS && homeElement.getType() != Element.types.SPELER){

            int extraStappen = this.berekenSpelerAfstand(spelerX, spelerY, homeSpelerX, homeSpelerY) + 2;

            // Verhoog het aantal stappen
            this.aantalStappen += extraStappen;

            // Zoek speler element
            Element speler = (Element)elementen.get(spelerY + "-" + spelerX);

            // Verander het speler icoon terug indien de speler op een doel staat
            speler.setIcon("speler.png");

            // Stop het element op de plaats van de oude coordinaten
            elementen.put(homeSpelerY + "-" + homeSpelerX, speler);

            // Verwijder het oude speler element
            elementen.remove(spelerY + "-" + spelerX);

            spelerX = homeSpelerX;
            spelerY = homeSpelerY;

            spelerVerplaatst = true;
        }

        return spelerVerplaatst;
    }

    /*
    * Berekent de afstand tussen de huidige positie van de speler
    * en de begin positie van de speler
    * @return Het aantal stappen dat een speler moet nemen om terug te komen
    * op zijn begin positie
    */
    public Integer berekenSpelerAfstand(int x1, int y1, int x2, int y2){
        double afstand = 0;

        Integer xCoordinaten = x1 - x2;
        Integer yCoordinaten = y1 - y2;

        double xKwadraat = Math.pow(xCoordinaten, 2);
        double yKwadraat = Math.pow(yCoordinaten, 2);

        afstand = Math.sqrt(xKwadraat + yKwadraat);
        afstand = Math.ceil(afstand);
        
        return (int)afstand;
    }

    /**
    * Verhoogt het aantal stappen dat een speler heeft gezet met 1
    **/
    public void setStap(){
        this.aantalStappen += 1;
    }

    /**
    * Geeft het aantal stappen terug
    * @return Het aantal stappen dat een speler heeft gezet gedurende het level
    **/
    public int getStappen(){
        return this.aantalStappen;
    }

    /**
    * Bouwt het speelveld opnieuw op aan de hand van wijzigingen die door
    * de functie doeZet() uitgevoerd zijn
    * @param speelveld Het speelveld waarop de labels aangepast gaan worden
    * @return Een JPanel met daarin de aangepaste labels
    **/
    public JPanel herinitialiseerSpeelveld(JPanel speelveld){

        Component[] components = speelveld.getComponents();

        speelveld.removeAll();

        for (int i = 0; i < components.length; i++){
            
            JLabel tmpLabel = (JLabel)components[i];

            String key = tmpLabel.getName();

            Element tmpElement = (Element)elementen.get(key);
            if (tmpElement != null){

                String icon = tmpElement.getIcon();
                String img = System.getProperty("user.dir") + "\\src\\sokoban\\image\\" + icon;
                ImageIcon elementImage = new ImageIcon(img);

                tmpLabel.setIcon(elementImage);
            }else{

                tmpLabel.setIcon(null);
            }

            tmpLabel.setOpaque(true);

            speelveld.add(tmpLabel);
        }

        return speelveld;
    }

    /**
    * Bouwt een JPanel op met daarop labels, die de elementen van het speelveld bevatten
    * @return Het opgebouwde JPnanel met labels
    **/
    public JPanel maakSpeelveld(){
        int xAantal = 20;
        int yAantal = 15;
        int grootte = 20;

        JPanel speelveld = new JPanel();
        
        speelveld.removeAll();

        aantalDoelen = 0;

        for (int i = 0; i < yAantal; i++){
            for (int j = 0; j < xAantal; j++){

                int xPositie = j * grootte;
                int yPositie = i * grootte;

                JLabel label = new JLabel();
                label.setBounds(xPositie, yPositie, grootte, grootte);
                label.setBackground(Color.GRAY);

                String lblNaam = i + "-" + j;
                label.setName(lblNaam);

                Element tmpElement = (Element)elementen.get(lblNaam);
                if(tmpElement != null){
                    // Sla de doelen op zodat de coordinaten hiervan niet gewijzigd worden
                    if (tmpElement.getType() == Element.types.DOEL){
                        doelElementen.put(lblNaam, (Doel)tmpElement);
                        aantalDoelen++;
                    }

                    String icon = tmpElement.getIcon();

                    String img = System.getProperty("user.dir") + "\\src\\sokoban\\image\\" + icon;
                    ImageIcon elementImage = new ImageIcon(img);

                    label.setIcon(elementImage);
                }

                label.setOpaque(true);
                speelveld.add(label);
            }
        }
        return speelveld;
    }

    /**
    * Vervangt de elementen in de HashMap elementen
    * op basis van de richting waarin de speler zich verplaatst
    * @param richting De richting waar de elementen naar verplaatst moeten worden
    * @param spelerTrekt Of de elementen aan de andere kant van de speler mee verplaatsen
    **/
    public void verplaatsElementen(String richting, Boolean spelerTrekt){
        Integer nieuwSpelerY = spelerY;
        Integer nieuwSpelerX = spelerX;

        if (richting.compareTo("boven") == 0){
            nieuwSpelerY -= 1;
        }else if (richting.compareTo("onder") == 0){
            nieuwSpelerY += 1;
        }else if (richting.compareTo("rechts") == 0 ){
            nieuwSpelerX += 1;
        }else if (richting.compareTo("links") == 0 ){
            nieuwSpelerX -= 1;
        }

        // Verplaats doos
        if(this.verplaatsElement(nieuwSpelerX, nieuwSpelerY, richting)){
            this.setStap();
            // Verplaats speler
            this.verplaatsElement(spelerX, spelerY, richting);
            if(spelerTrekt){
                this.trekElement(spelerX, spelerY, richting);
            }

            spelerX = nieuwSpelerX;
            spelerY = nieuwSpelerY;
        }
    }

    /**
    * Controleert of op alle doelen een doos element staat
    * @return Een waarde, dat aangeeft of op alle doelen een doos staat
    **/
    public Boolean controleerDoelen(){
        Integer dozenOpDoelen = 0;

        // Loop door de doelen
        Map<String, Object> map = doelElementen;
        for (String key : map.keySet()){
            
            Element tmpElement = (Element)elementen.get(key);
            if (tmpElement == null){
                // De coordinaten waren overschreven van het doel.
                // De coordinaten worden teruggezet
                elementen.put(key, (Element)doelElementen.get(key));
            }
            else{
                if (tmpElement.getType() == Element.types.DOOS){
                    dozenOpDoelen++;
                    tmpElement.setIcon("doos-actief.png");
                }else if (tmpElement.getType() == Element.types.SPELER){
                    tmpElement.setIcon("speler-actief.png");
                }
            }
        }

        if (aantalDoelen == dozenOpDoelen){
            return true;
        }else{
            return false;
        }
    }

    /**
    * Controleert of een element verplaatst mag worden.
    * Indien dit zo is, wordt het element op de nieuwe coordinaten in de HashMap elementen gezet.
    * @param elementX Het huidige X coordinaat van het element dat verplaatst dient te worden
    * @param elementY Het huidige Y coordinaat van het element dat verplaatst dient te worden
    * @param richting De richting, naar waar het element verplaatst dient te worden
    * @return Een waarde, dat aangeeft of een element
    * naar een bepaalde richting verplaatst kan worden
    **/
    public Boolean verplaatsElement(Integer elementX, Integer elementY, String richting){
        Integer elementNieuwX = elementX;
        Integer elementNieuwY = elementY;

        Element element = (Element)elementen.get(elementY + "-" + elementX);

        if (richting.compareTo("boven") == 0){
            elementNieuwY -= 1;
        }else if (richting.compareTo("onder") == 0){
            elementNieuwY += 1;
        }else if (richting.compareTo("rechts") == 0 ){
            elementNieuwX += 1;
        }else if (richting.compareTo("links") == 0 ){
            elementNieuwX -= 1;
        }

        if (element != null && element.isVerplaatsbaar() == false){
            if (element.isVerplaatsbaar() == false){
                if (element.getType() == Element.types.DOEL){
                    return true;
                }else{
                    return false;
                }
            }else{
                return true;
            }
        }else{
            if (element != null){
                if(this.verplaatsElement(elementNieuwX, elementNieuwY, richting)){
                    element.setType(element.getType());
                    elementen.put(elementNieuwY + "-" + elementNieuwX, element);
                    elementen.remove(elementY + "-" + elementX);
                }else{
                    return false;
                }
            }
            return true;
        }
    }

    /**
    * Er wordt een element op het lege veld gezet waarvan de coordinaten zich op de tegenovergestelde richting bevinden
    * @param elementX Het X coordinaat waarnaar het element verplaatst dient te worden in de andere kant van de richting
    * @param elementY Het Y coordinaat waarnaar het element verplaatst dient te worden in de andere kant van de richting
    * @param richting De richting, naar waarin het element verplaatst dient te worden
    **/
    public void trekElement(Integer leegElementX, Integer leegElementY, String richting){
        Integer trekElementX = leegElementX;
        Integer trekElementY = leegElementY;

        if (richting.compareTo("boven") == 0){
            trekElementY += 1;
        }else if (richting.compareTo("onder") == 0){
            trekElementY -= 1;
        }else if (richting.compareTo("rechts") == 0 ){
            trekElementX -= 1;
        }else if (richting.compareTo("links") == 0 ){
            trekElementX += 1;
        }
        
        Element trekElement = (Element)elementen.get(trekElementY + "-" + trekElementX);

        if (trekElement != null && trekElement.isVerplaatsbaar() == true){
            trekElement.setType(trekElement.getType());
            elementen.put(leegElementY + "-" + leegElementX, trekElement);
            elementen.remove(trekElementY + "-" + trekElementX);
            if(kindModus){
                this.trekElement(trekElementX, trekElementY, richting);
            }
        }
    }

    /**
    * Controleert of de speler in een bepaalde richting verplaatst mag worden
    * @param richting De richting, waarin de speler verplaatst dient te worden
    * @return Een waarde, dat aangeeft of de speler verplaatst mag worden
    **/
    public Boolean controleerZet(String richting){
        if(this.kindModus){
            return true;
        }else{
            Boolean valideZet = true;
            Integer eersteElementY = spelerY;
            Integer eersteElementX = spelerX;

            if (richting.compareTo("boven") == 0){
                eersteElementY -= 1;
            }else if (richting.compareTo("onder") == 0){
                eersteElementY += 1;
            }else if (richting.compareTo("rechts") == 0 ){
                eersteElementX += 1;
            }else if (richting.compareTo("links") == 0 ){
                eersteElementX -= 1;
            }

            Element eersteElement = (Element)elementen.get(eersteElementY + "-" + eersteElementX);

            // Eerstvolgende element
            if (eersteElement != null){
                if (eersteElement.isVerplaatsbaar() == false && eersteElement.getType() == Element.types.MUUR){
                    valideZet = false;
                }
            }

            // Daarop volgende element
            if (eersteElement != null && eersteElement.getType() == Element.types.DOOS && valideZet == true){
                Integer tweedeElementY = eersteElementY;
                Integer tweedeElementX = eersteElementX;

                if (richting.compareTo("boven") == 0){
                    tweedeElementY -= 1;
                }else if (richting.compareTo("onder") == 0){
                    tweedeElementY += 1;
                }else if (richting.compareTo("rechts") == 0 ){
                    tweedeElementX += 1;
                }else if (richting.compareTo("links") == 0 ){
                    tweedeElementX -= 1;
                }

                Element tweedeElement = (Element)elementen.get(tweedeElementY + "-" + tweedeElementX);

                if (tweedeElement != null){
                    if (tweedeElement.isVerplaatsbaar() == false && tweedeElement.getType() == Element.types.MUUR){
                        valideZet = false;
                    }else if (tweedeElement.getType() == Element.types.DOOS){
                        valideZet = false;
                    }
                }
            }
            return valideZet;
        }
    }

    /**
    * @return X-coordinaat van de speler
    **/
    public Integer getSpelerX() {
        return spelerX;
    }

    /**
    * @return Y-coordinaat van de speler
    **/
    public Integer getSpelerY() {
        return spelerY;
    }

    /**
    * Vult de elementen HashMap met elementen. Welke elementen worden gebruikt,
    * wordt bepaald aan de hand van het level dat door de gebruiker is gekozen
    **/
    private void laadSpeelveld(){
        Element doos = new Doos();
        Element speler = new Speler();
        Element muur = new Muur();
        Element doel = new Doel();

        switch(besturingController.getLevel()){
            case 1:    
		elementen.put("3-7", muur);
		elementen.put("3-8", muur);
		elementen.put("3-9", muur);
		elementen.put("3-10", muur);
		elementen.put("3-11", muur);
		elementen.put("3-12", muur);
		elementen.put("4-7", muur);
		elementen.put("4-12", muur);
		elementen.put("4-13", muur);
		elementen.put("5-7", muur);
		elementen.put("5-6", muur);
		elementen.put("5-10", muur);
		elementen.put("5-13", muur);
		elementen.put("6-6", muur);
		elementen.put("6-13", muur);
		elementen.put("7-6", muur);
		elementen.put("7-10", muur);
		elementen.put("7-13", muur);
		elementen.put("8-6", muur);
		elementen.put("8-7", muur);
		elementen.put("8-8", muur);
		elementen.put("8-9", muur);
		elementen.put("8-10", muur);
		elementen.put("8-13", muur);
		elementen.put("9-10", muur);
		elementen.put("9-11", muur);
		elementen.put("9-12", muur);
		elementen.put("9-13", muur);

		elementen.put("5-11", new Doos());
		elementen.put("6-11", new Doos());
		elementen.put("7-11", new Doos());

		elementen.put("5-9", doel);
		elementen.put("6-9", doel);
		elementen.put("7-9", doel);

		elementen.put("6-12", speler);
                spelerY = 6;
                spelerX = 12;
                break;
            case 2:
                elementen.put("3-3", muur);
                elementen.put("3-4", muur);
                elementen.put("3-5", muur);
                elementen.put("3-6", muur);
                elementen.put("3-7", muur);
                elementen.put("4-7", muur);
                elementen.put("4-8", muur);
                elementen.put("5-8", muur);
                elementen.put("5-9", muur);
                elementen.put("6-9", muur);
                elementen.put("7-9", muur);
                elementen.put("8-9", muur);
                elementen.put("9-9", muur);
                elementen.put("10-9", muur);
                elementen.put("11-9", muur);
                elementen.put("12-9", muur);
                elementen.put("12-8", muur);
                elementen.put("12-7", muur);
                elementen.put("11-7", muur);
                elementen.put("10-7", muur);
                elementen.put("9-7", muur);
                elementen.put("9-6", muur);
                elementen.put("8-6", muur);
                elementen.put("8-5", muur);
                elementen.put("7-5", muur);
                elementen.put("7-4", muur);
                elementen.put("6-4", muur);
                elementen.put("6-3", muur);
                elementen.put("5-3", muur);
                elementen.put("4-3", muur);

                elementen.put("9-8", doel);
                elementen.put("10-8", doel);
                elementen.put("11-8", doel);

                elementen.put("7-7", new Doos());
                elementen.put("6-6", new Doos());
                elementen.put("5-5", new Doos());

                elementen.put("5-4", speler);
                spelerY = 5;
                spelerX = 4;
                break;
            case 3:
                elementen.put("4-7", muur);
                elementen.put("4-8", muur);
                elementen.put("4-9", muur);
                elementen.put("4-10", muur);
                elementen.put("5-10", muur);
                elementen.put("5-11", muur);
                elementen.put("5-12", muur);
                elementen.put("5-13", muur);
                elementen.put("6-10", muur);
                elementen.put("6-13", muur);
                elementen.put("6-14", muur);
                elementen.put("7-14", muur);
                elementen.put("8-14", muur);
                elementen.put("9-14", muur);
                elementen.put("9-13", muur);
                elementen.put("9-12", muur);
                elementen.put("9-11", muur);
                elementen.put("10-11", muur);
                elementen.put("11-11", muur);
                elementen.put("11-10", muur);
                elementen.put("11-9", muur);
                elementen.put("11-8", muur);
                elementen.put("10-8", muur);
                elementen.put("9-8", muur);
                elementen.put("8-8", muur);
                elementen.put("8-7", muur);
                elementen.put("7-7", muur);
                elementen.put("6-7", muur);
                elementen.put("5-7", muur);

                elementen.put("8-9", doel);
                elementen.put("9-9", doel);
                elementen.put("10-9", doel);

                elementen.put("7-9", new Doos());
                elementen.put("9-10", new Doos());
                elementen.put("8-11", new Doos());

                elementen.put("7-8", speler);
                spelerY = 7;
                spelerX = 8;
                break;
            case 4:
		elementen.put("4-8", muur);
		elementen.put("4-9", muur);
		elementen.put("4-10", muur);
		elementen.put("4-11", muur);
		elementen.put("4-12", muur);
		elementen.put("4-13", muur);
		elementen.put("5-8", muur);
		elementen.put("5-9", muur);
		elementen.put("5-12", muur);
		elementen.put("5-13", muur);
		elementen.put("6-8", muur);
		elementen.put("6-13", muur);
		elementen.put("7-8", muur);
		elementen.put("7-13", muur);
		elementen.put("8-8", muur);
		elementen.put("8-13", muur);
		elementen.put("9-8", muur);
		elementen.put("9-8", muur);
		elementen.put("9-9", muur);
		elementen.put("9-11", muur);
		elementen.put("9-12", muur);
		elementen.put("9-13", muur);
		elementen.put("10-8", muur);
		elementen.put("10-9", muur);
		elementen.put("10-10", muur);
		elementen.put("10-11", muur);
		elementen.put("10-12", muur);
		elementen.put("10-13", muur);

		elementen.put("7-9", doel);
		elementen.put("7-12", doel);

		elementen.put("7-10", new Doos());
		elementen.put("7-11", new Doos());

		elementen.put("9-10", speler);
                spelerY = 9;
                spelerX = 10;
                break;
            case 5:
		elementen.put("2-5", muur);
		elementen.put("2-6", muur);
		elementen.put("2-7", muur);
		elementen.put("2-8", muur);
		elementen.put("2-9", muur);
		elementen.put("2-10", muur);
		elementen.put("2-11", muur);
		elementen.put("2-12", muur);
		elementen.put("2-13", muur);
		elementen.put("3-13", muur);
		elementen.put("4-13", muur);
		elementen.put("5-13", muur);
		elementen.put("6-13", muur);
		elementen.put("7-13", muur);
		elementen.put("8-13", muur);
		elementen.put("9-13", muur);
		elementen.put("3-5", muur);
		elementen.put("4-5", muur);
		elementen.put("5-5", muur);
		elementen.put("6-5", muur);
		elementen.put("7-5", muur);
		elementen.put("8-5", muur);
		elementen.put("9-5", muur);
		elementen.put("10-5", muur);
		elementen.put("10-6", muur);
		elementen.put("10-7", muur);
		elementen.put("10-8", muur);
		elementen.put("10-9", muur);
		elementen.put("10-10", muur);
		elementen.put("10-11", muur);
		elementen.put("10-12", muur);
		elementen.put("10-13", muur);
		elementen.put("4-6", muur);
		elementen.put("6-6", muur);
		elementen.put("4-8", muur);
		elementen.put("6-8", muur);
		elementen.put("8-8", muur);
		elementen.put("4-10", muur);
		elementen.put("6-10", muur);
		elementen.put("8-10", muur);
		elementen.put("4-12", muur);
		elementen.put("6-12", muur);

		elementen.put("6-9", doel);
		elementen.put("7-9", doel);
		elementen.put("7-8", doel);
		elementen.put("7-10", doel);
		elementen.put("9-8", doel);
		elementen.put("9-10", doel);

		elementen.put("4-7", new Doos());
		elementen.put("4-11", new Doos());
		elementen.put("6-7", new Doos());
		elementen.put("6-11", new Doos());
		elementen.put("8-7", new Doos());
		elementen.put("8-11", new Doos());

		elementen.put("8-9", speler);
                spelerY = 8;
                spelerX = 9;
                break;
            case 6:
		elementen.put("3-5", muur);
		elementen.put("3-6", muur);
		elementen.put("3-7", muur);
		elementen.put("3-8", muur);
		elementen.put("3-9", muur);
		elementen.put("3-10", muur);
		elementen.put("3-11", muur);
		elementen.put("3-12", muur);
		elementen.put("3-13", muur);
		elementen.put("3-14", muur);
		elementen.put("3-15", muur);
		elementen.put("4-5", muur);
		elementen.put("5-5", muur);
		elementen.put("6-5", muur);
		elementen.put("7-5", muur);
		elementen.put("8-5", muur);
		elementen.put("9-5", muur);
		elementen.put("10-5", muur);
		elementen.put("11-5", muur);
		elementen.put("11-6", muur);
		elementen.put("11-7", muur);
		elementen.put("11-8", muur);
		elementen.put("11-9", muur);
		elementen.put("11-10", muur);
		elementen.put("11-11", muur);
		elementen.put("11-12", muur);
		elementen.put("11-13", muur);
		elementen.put("11-14", muur);
		elementen.put("11-15", muur);
		elementen.put("4-15", muur);
		elementen.put("5-15", muur);
		elementen.put("6-15", muur);
		elementen.put("7-15", muur);
		elementen.put("8-15", muur);
		elementen.put("9-15", muur);
		elementen.put("10-15", muur);
		elementen.put("5-8", muur);
		elementen.put("7-9", muur);
		elementen.put("9-8", muur);
		elementen.put("5-12", muur);
		elementen.put("7-12", muur);
		elementen.put("9-12", muur);

		elementen.put("6-8", doel);
		elementen.put("7-8", doel);
		elementen.put("8-8", doel);
		elementen.put("7-7", doel);
		elementen.put("6-12", doel);
		elementen.put("8-12", doel);
		elementen.put("7-13", doel);

		elementen.put("5-10", new Doos());
		elementen.put("6-9", new Doos());
		elementen.put("6-11", new Doos());
		elementen.put("7-10", new Doos());
		elementen.put("8-9", new Doos());
		elementen.put("8-11", new Doos());
		elementen.put("9-10", new Doos());

		elementen.put("10-6", speler);
                spelerY = 10;
                spelerX = 6;
                break;
            case 7:
		elementen.put("2-7", muur);
		elementen.put("2-8", muur);
		elementen.put("2-9", muur);
		elementen.put("2-10", muur);
		elementen.put("2-11", muur);
		elementen.put("2-12", muur);
		elementen.put("3-6", muur);
		elementen.put("3-7", muur);
		elementen.put("3-9", muur);
		elementen.put("3-12", muur);
		elementen.put("3-13", muur);
		elementen.put("4-5", muur);
		elementen.put("4-6", muur);
		elementen.put("4-13", muur);
		elementen.put("4-14", muur);
		elementen.put("5-5", muur);
		elementen.put("5-14", muur);
		elementen.put("6-5", muur);
		elementen.put("6-9", muur);
		elementen.put("6-10", muur);
		elementen.put("6-12", muur);
		elementen.put("6-14", muur);
		elementen.put("6-15", muur);
		elementen.put("6-16", muur);
		elementen.put("7-5", muur);
		elementen.put("7-7", muur);
		elementen.put("7-9", muur);
		elementen.put("7-16", muur);
		elementen.put("8-5", muur);
		elementen.put("8-12", muur);
		elementen.put("8-16", muur);
		elementen.put("9-5", muur);
		elementen.put("9-6", muur);
		elementen.put("9-7", muur);
		elementen.put("9-8", muur);
		elementen.put("9-9", muur);
		elementen.put("9-14", muur);
		elementen.put("9-16", muur);
		elementen.put("10-9", muur);
		elementen.put("10-10", muur);
		elementen.put("10-11", muur);
		elementen.put("10-12", muur);
		elementen.put("10-16", muur);
		elementen.put("11-12", muur);
		elementen.put("11-16", muur);
		elementen.put("12-12", muur);
		elementen.put("12-13", muur);
		elementen.put("12-14", muur);
		elementen.put("12-15", muur);
		elementen.put("12-16", muur);

		elementen.put("7-12", new Doos());
		elementen.put("8-14", new Doos());
		elementen.put("9-13", new Doos());
		elementen.put("10-14", new Doos());

		elementen.put("6-7", doel);
		elementen.put("7-6", doel);
		elementen.put("8-7", doel);
		elementen.put("7-8", doel);

		elementen.put("5-9", speler);
                spelerY = 5;
                spelerX = 9;
                break;
            case 8:
		elementen.put("2-4", muur);
		elementen.put("2-5", muur);
		elementen.put("2-6", muur);
		elementen.put("2-7", muur);
		elementen.put("2-8", muur);
		elementen.put("2-9", muur);
		elementen.put("2-10", muur);
		elementen.put("3-10", muur);
		elementen.put("3-11", muur);
		elementen.put("4-11", muur);
		elementen.put("4-12", muur);
		elementen.put("5-12", muur);
		elementen.put("5-13", muur);
		elementen.put("6-13", muur);
		elementen.put("7-13", muur);
		elementen.put("8-13", muur);
		elementen.put("9-13", muur);
		elementen.put("9-12", muur);
		elementen.put("9-11", muur);
		elementen.put("9-10", muur);
		elementen.put("9-9", muur);
		elementen.put("8-9", muur);
		elementen.put("8-8", muur);
		elementen.put("7-8", muur);
		elementen.put("6-8", muur);
		elementen.put("6-7", muur);
		elementen.put("5-7", muur);
		elementen.put("11-5", muur);
		elementen.put("12-5", muur);
		elementen.put("10-4", muur);
		elementen.put("10-5", muur);
		elementen.put("10-6", muur);
		elementen.put("10-7", muur);
		elementen.put("10-8", muur);
		elementen.put("10-9", muur);
		elementen.put("7-5", muur);
		elementen.put("8-5", muur);
		elementen.put("9-5", muur);
		elementen.put("3-4", muur);
		elementen.put("3-5", muur);
		elementen.put("4-4", muur);
		elementen.put("5-4", muur);
		elementen.put("6-4", muur);
		elementen.put("7-4", muur);

		elementen.put("4-7", new Doos());
		elementen.put("4-9", new Doos());
		elementen.put("5-6", new Doos());
		elementen.put("5-10", new Doos());
		elementen.put("8-6", new Doos());

		elementen.put("6-10", doel);
		elementen.put("6-12", doel);
		elementen.put("7-11", doel);
		elementen.put("8-10", doel);
		elementen.put("8-12", doel);

		elementen.put("9-8", speler);
                spelerY = 9;
                spelerX = 8;
                break;
            case 9:
		elementen.put("2-4", muur);
		elementen.put("2-5", muur);
		elementen.put("2-6", muur);
		elementen.put("2-7", muur);
		elementen.put("2-8", muur);
		elementen.put("3-4", muur);
		elementen.put("3-5", muur);
		elementen.put("3-8", muur);
		elementen.put("3-9", muur);
		elementen.put("3-10", muur);
		elementen.put("3-11", muur);
		elementen.put("3-12", muur);
		elementen.put("3-13", muur);
		elementen.put("3-14", muur);
		elementen.put("4-4", muur);
		elementen.put("4-5", muur);
		elementen.put("4-9", muur);
		elementen.put("4-11", muur);
		elementen.put("4-14", muur);
		elementen.put("4-15", muur);
		elementen.put("5-4", muur);
		elementen.put("5-15", muur);
		elementen.put("6-4", muur);
		elementen.put("6-15", muur);
		elementen.put("7-4", muur);
		elementen.put("7-5", muur);
		elementen.put("7-10", muur);
		elementen.put("7-11", muur);
		elementen.put("7-15", muur);
		elementen.put("8-5", muur);
		elementen.put("8-15", muur);
		elementen.put("9-5", muur);
		elementen.put("9-15", muur);
		elementen.put("10-5", muur);
		elementen.put("10-13", muur);
		elementen.put("10-14", muur);
		elementen.put("10-15", muur);
		elementen.put("11-5", muur);
		elementen.put("11-6", muur);
		elementen.put("11-9", muur);
		elementen.put("11-10", muur);
		elementen.put("11-11", muur);
		elementen.put("11-13", muur);
		elementen.put("11-15", muur);
		elementen.put("12-5", muur);
		elementen.put("12-15", muur);
		elementen.put("13-5", muur);
		elementen.put("13-6", muur);
		elementen.put("13-7", muur);
		elementen.put("13-8", muur);
		elementen.put("13-9", muur);
		elementen.put("13-10", muur);
		elementen.put("13-11", muur);
		elementen.put("13-12", muur);
		elementen.put("13-13", muur);
		elementen.put("13-14", muur);
		elementen.put("13-15", muur);

		elementen.put("5-7", new Doos());
		elementen.put("6-7", new Doos());
		elementen.put("7-7", new Doos());
		elementen.put("8-7", new Doos());
		elementen.put("9-7", new Doos());
		elementen.put("10-7", new Doos());
		elementen.put("11-7", new Doos());
		elementen.put("5-8", new Doos());
		elementen.put("7-8", new Doos());
		elementen.put("9-8", new Doos());
		elementen.put("5-9", new Doos());
		elementen.put("5-11", new Doos());
		elementen.put("5-13", new Doos());
		elementen.put("6-13", new Doos());
		elementen.put("7-13", new Doos());
		elementen.put("8-13", new Doos());
		elementen.put("9-13", new Doos());
		elementen.put("11-12", new Doos());

		elementen.put("6-9", doel);
		elementen.put("6-10", doel);
		elementen.put("6-11", doel);
		elementen.put("6-12", doel);
		elementen.put("7-9", doel);
		elementen.put("7-12", doel);
		elementen.put("8-9", doel);
		elementen.put("8-10", doel);
		elementen.put("8-11", doel);
		elementen.put("8-12", doel);
		elementen.put("9-9", doel);
		elementen.put("9-10", doel);
		elementen.put("9-11", doel);
		elementen.put("9-12", doel);
		elementen.put("10-9", doel);
		elementen.put("10-10", doel);
		elementen.put("10-11", doel);
		elementen.put("10-12", doel);

		elementen.put("5-14", speler);
                spelerY = 5;
                spelerX = 14;
                break;
            case 10:
		elementen.put("2-8", muur);
		elementen.put("2-9", muur);
		elementen.put("2-10", muur);
		elementen.put("2-11", muur);
		elementen.put("3-7", muur);
		elementen.put("3-8", muur);
		elementen.put("3-11", muur);
		elementen.put("4-7", muur);
		elementen.put("4-11", muur);
		elementen.put("4-12", muur);
		elementen.put("4-13", muur);
		elementen.put("5-7", muur);
		elementen.put("5-13", muur);
		elementen.put("5-14", muur);
		elementen.put("6-7", muur);
		elementen.put("6-11", muur);
		elementen.put("6-14", muur);
		elementen.put("6-15", muur);
		elementen.put("7-7", muur);
		elementen.put("7-15", muur);
		elementen.put("8-7", muur);
		elementen.put("8-8", muur);
		elementen.put("8-15", muur);
		elementen.put("9-8", muur);
		elementen.put("9-15", muur);
		elementen.put("10-8", muur);
		elementen.put("10-14", muur);
		elementen.put("10-15", muur);
		elementen.put("11-8", muur);
		elementen.put("11-9", muur);
		elementen.put("11-10", muur);
		elementen.put("11-11", muur);
		elementen.put("11-12", muur);
		elementen.put("11-13", muur);
		elementen.put("11-14", muur);

		elementen.put("4-9", doel);
		elementen.put("4-10", doel);
		elementen.put("5-10", doel);
		elementen.put("7-10", doel);
		elementen.put("8-10", doel);
		elementen.put("8-9", doel);
		elementen.put("9-11", doel);
		elementen.put("10-11", doel);
		elementen.put("10-12", doel);

		elementen.put("5-9", new Doos());
		elementen.put("6-10", new Doos());
		elementen.put("7-9", new Doos());
		elementen.put("9-9", new Doos());
		elementen.put("7-11", new Doos());
		elementen.put("6-12", new Doos());
		elementen.put("8-12", new Doos());
		elementen.put("7-13", new Doos());
		elementen.put("9-13", new Doos());

		elementen.put("6-13", speler);
                spelerY = 6;
                spelerX = 13;
                break;
            case 11:
		elementen.put("2-7", muur);
		elementen.put("2-8", muur);
		elementen.put("2-9", muur);
		elementen.put("2-10", muur);
		elementen.put("2-11", muur);
		elementen.put("2-12", muur);
		elementen.put("2-13", muur);
		elementen.put("2-14", muur);
		elementen.put("3-6", muur);
		elementen.put("3-7", muur);
		elementen.put("3-8", muur);
		elementen.put("3-9", muur);
		elementen.put("3-11", muur);
		elementen.put("3-13", muur);
		elementen.put("3-14", muur);
		elementen.put("4-5", muur);
		elementen.put("4-6", muur);
		elementen.put("4-7", muur);
		elementen.put("4-8", muur);
		elementen.put("4-14", muur);
		elementen.put("5-4", muur);
		elementen.put("5-5", muur);
		elementen.put("5-14", muur);
		elementen.put("5-15", muur);
		elementen.put("6-4", muur);
		elementen.put("6-5", muur);
		elementen.put("6-10", muur);
		elementen.put("6-12", muur);
		elementen.put("6-15", muur);
		elementen.put("7-4", muur);
		elementen.put("7-9", muur);
		elementen.put("7-10", muur);
		elementen.put("7-15", muur);
		elementen.put("8-4", muur);
		elementen.put("8-9", muur);
		elementen.put("8-10", muur);
		elementen.put("8-12", muur);
		elementen.put("8-14", muur);
		elementen.put("8-15", muur);
		elementen.put("9-4", muur);
		elementen.put("9-5", muur);
		elementen.put("9-9", muur);
		elementen.put("9-10", muur);
		elementen.put("9-11", muur);
		elementen.put("9-12", muur);
		elementen.put("9-13", muur);
		elementen.put("9-14", muur);
		elementen.put("9-15", muur);
		elementen.put("10-4", muur);
		elementen.put("10-5", muur);
		elementen.put("10-9", muur);
		elementen.put("10-10", muur);
		elementen.put("11-4", muur);
		elementen.put("11-5", muur);
		elementen.put("11-6", muur);
		elementen.put("11-7", muur);
		elementen.put("11-8", muur);
		elementen.put("11-9", muur);

		elementen.put("6-8", new Doos());
		elementen.put("7-7", new Doos());
		elementen.put("8-6", new Doos());
		elementen.put("8-8", new Doos());

		elementen.put("6-11", doel);
		elementen.put("7-11", doel);
		elementen.put("7-12", doel);
		elementen.put("8-11", doel);

		elementen.put("7-14", speler);
                spelerY = 7;
                spelerX = 14;
                break;
            case 12:
                elementen.put("0-8", muur);
                elementen.put("0-9", muur);
                elementen.put("0-10", muur);
                elementen.put("0-11", muur);
                elementen.put("0-12", muur);
                elementen.put("1-8", muur);
                elementen.put("1-12", muur);
                elementen.put("1-13", muur);
                elementen.put("1-14", muur);
                elementen.put("1-15", muur);
                elementen.put("1-16", muur);
                elementen.put("2-8", muur);
                elementen.put("2-10", muur);
                elementen.put("2-12", muur);
                elementen.put("2-13", muur);
                elementen.put("2-16", muur);
                elementen.put("3-8", muur);
                elementen.put("3-16", muur);
                elementen.put("4-0", muur);
                elementen.put("4-1", muur);
                elementen.put("4-2", muur);
                elementen.put("4-3", muur);
                elementen.put("4-4", muur);
                elementen.put("4-5", muur);
                elementen.put("4-6", muur);
                elementen.put("4-7", muur);
                elementen.put("4-8", muur);
                elementen.put("4-10", muur);
                elementen.put("4-11", muur);
                elementen.put("4-12", muur);
                elementen.put("4-16", muur);
                elementen.put("5-0", muur);
                elementen.put("5-7", muur);
                elementen.put("5-8", muur);
                elementen.put("5-14", muur);
                elementen.put("5-15", muur);
                elementen.put("5-16", muur);
                elementen.put("6-0", muur);
                elementen.put("6-14", muur);
                elementen.put("6-15", muur);
                elementen.put("7-0", muur);
                elementen.put("7-7", muur);
                elementen.put("7-8", muur);
                elementen.put("7-15", muur);
                elementen.put("8-0", muur);
                elementen.put("8-1", muur);
                elementen.put("8-2", muur);
                elementen.put("8-3", muur);
                elementen.put("8-4", muur);
                elementen.put("8-5", muur);
                elementen.put("8-6", muur);
                elementen.put("8-7", muur);
                elementen.put("8-8", muur);
                elementen.put("8-14", muur);
                elementen.put("8-15", muur);
                elementen.put("9-8", muur);
                elementen.put("9-15", muur);
                elementen.put("10-8", muur);
                elementen.put("10-9", muur);
                elementen.put("10-10", muur);
                elementen.put("10-12", muur);
                elementen.put("10-13", muur);
                elementen.put("10-15", muur);
                elementen.put("11-10", muur);
                elementen.put("11-15", muur);
                elementen.put("12-10", muur);
                elementen.put("12-11", muur);
                elementen.put("12-12", muur);
                elementen.put("12-13", muur);
                elementen.put("12-14", muur);
                elementen.put("12-15", muur);

                elementen.put("2-11", new Doos());
                elementen.put("3-15", new Doos());
                elementen.put("5-10", new Doos());
                elementen.put("5-13", new Doos());
                elementen.put("6-9", new Doos());
                elementen.put("6-11", new Doos());
                elementen.put("6-12", new Doos());
                elementen.put("7-9", new Doos());
                elementen.put("7-12", new Doos());
                elementen.put("8-11", new Doos());
                elementen.put("9-10", new Doos());
                elementen.put("9-12", new Doos());

                elementen.put("5-1", doel);
                elementen.put("5-2", doel);
                elementen.put("5-3", doel);
                elementen.put("5-4", doel);
                elementen.put("6-1", doel);
                elementen.put("6-2", doel);
                elementen.put("6-3", doel);
                elementen.put("6-4", doel);
                elementen.put("7-1", doel);
                elementen.put("7-2", doel);
                elementen.put("7-3", doel);
                elementen.put("7-4", doel);

                elementen.put("7-14", speler);
                spelerY = 7;
                spelerX = 14;
                break;
            default:
                elementen.put("3-3", muur);
                elementen.put("3-4", muur);
                elementen.put("3-5", muur);
                elementen.put("3-6", muur);
                elementen.put("3-7", muur);
                elementen.put("4-7", muur);
                elementen.put("4-8", muur);
                elementen.put("5-8", muur);
                elementen.put("5-9", muur);
                elementen.put("6-9", muur);
                elementen.put("7-9", muur);
                elementen.put("8-9", muur);
                elementen.put("9-9", muur);
                elementen.put("10-9", muur);
                elementen.put("11-9", muur);
                elementen.put("12-9", muur);
                elementen.put("12-8", muur);
                elementen.put("12-7", muur);
                elementen.put("11-7", muur);
                elementen.put("10-7", muur);
                elementen.put("9-7", muur);
                elementen.put("9-6", muur);
                elementen.put("8-6", muur);
                elementen.put("8-5", muur);
                elementen.put("7-5", muur);
                elementen.put("7-4", muur);
                elementen.put("6-4", muur);
                elementen.put("6-3", muur);
                elementen.put("5-3", muur);
                elementen.put("4-3", muur);

                elementen.put("9-8", doel);
                elementen.put("10-8", doel);
                elementen.put("11-8", doel);

                elementen.put("7-7", new Doos());
                elementen.put("6-6", new Doos());
                elementen.put("5-5", new Doos());

                elementen.put("5-4", speler);
                spelerY = 5;
                spelerX = 4;
                break;
        
        }
    }
}
